package com.shopoo.oauth.api;

import com.shopoo.dto.PageResponse;
import com.shopoo.dto.Response;
import com.shopoo.dto.SingleResponse;
import com.shopoo.oauth.dto.clientobject.TokenCO;
import com.shopoo.oauth.dto.clientobject.UserCO;
import com.shopoo.oauth.dto.clientobject.UserDetailDTO;
import com.shopoo.oauth.dto.cqe.LoginCmd;
import com.shopoo.oauth.dto.cqe.UserAddCmd;
import com.shopoo.oauth.dto.cqe.UserPowerUpdateCmd;
import com.shopoo.oauth.dto.cqe.UserQry;
import com.shopoo.oauth.dto.cqe.UserUpdateCmd;
import com.shopoo.oauth.dto.cqe.UserUpdateStatusCmd;

/**
 * @Description 用户应用服务
 * @Date 2020/12/3 10:40 上午
 * @Author <a href="mailto:android_li@sina.cn">Joe</a>
 **/
public interface UserService {

    /**
     * @Description: 新增用户并添加角色
     * @Author: limy66
     * @Date:   2021/5/14 18:22
     * @Param:  [userAddCommand]
     * @Return: void
     */
    Response add(UserAddCmd userAddCmd);

    /**
     * @Description: 更新用户信息与权限
     * @Author: limy66
     * @Date:   2021/5/14 18:40
     * @Param:  [userUpdateCommand]
     * @Return: void
     */
    Response updateById(UserUpdateCmd userUpdateCmd);

    /**
     * @Description 更新用户权限
     *
     * @Param [userPowerUpdateCommand]
     * @Return void
     * @Date 11:06 上午 2020/12/3
     * @Author <a href="mailto:android_li@sina.cn">Joe</a>
     */
    Response updatePower(UserPowerUpdateCmd userPowerUpdateCmd);

    /**
     * @Description 更新用户状态
     *
     * @Param [userUpdateStatusCommand]
     * @Return void
     * @Date 6:58 下午 2020/6/10
     * @Author <a href="mailto:android_li@sina.cn">Joe</a>
     */
    Response updateUserStatus(UserUpdateStatusCmd userUpdateStatusCmd);

    /**
     * @Description: 获取用户信息
     * @Author: limy66
     * @Date:   2021/6/2 8:34
     * @Param:  [oauth2Authentication]
     * @Return: com.bngrp.oauth2.dto.UserDTO
     */
    SingleResponse<UserDetailDTO> findUserInfo(String userId);

    /**
     * 根据条件分页查找用户信息
     * @param userQry
     * @Return com.shopoo.dto.PageResponse<com.shopoo.oauth.dto.clientobject.UserCO>
     * @Date: 2022/3/17 6:40 PM
     * @Author: <a href="mailto:android_li@sina.cn">MaoYuan.Li</a>
     */ 
    PageResponse<UserCO> findByConditions(UserQry userQry);

    /**
     * @Description: 根据用户ID查找用户信息
     * @Author: limy66
     * @Date:   2021/5/14 18:51
     * @Param:  [userId]
     * @Return: com.bngrp.system.application.user.dto.UserDTO
     */
    SingleResponse<UserCO> findByUserId(String userId);

    /**
     * @Description: 检查用户名是否存在
     * @Author: limy66
     * @Date:   2021/8/24 8:27
     * @Param:  [username]
     * @Return: void
     */
    Response checkUsername(String username);

    /**
     * @Description: 登录获取token
     * @Author: limy66
     * @Date:   2021/8/30 15:35
     * @Param:  [loginInfo]
     * @Return: com.shopoo.oauth2.client.dto.Oauth2TokenDTO
     */
    SingleResponse<TokenCO> login(LoginCmd loginCmd) ;
}
